package esservice

/*
   @Title  文件名称 : EmployeeService.go
   @Description 描述: 服务EmployeeService

   @Author  作者: leijmdas@163.com  时间(2024-03-30 10:29:07)
   @Update  作者: leijmdas@163.com  时间(2024-03-30 10:29:07)

*/

import (
	"fmt"
	basedto "gitee.com/ichub/gofactroy/common/ichubbase/dto"
	"gitee.com/ichub/gofactroy/common/shop/dao"
	"gitee.com/ichub/gofactroy/common/shop/dto"
	"gitee.com/ichub/gofactroy/common/shop/model"
)

// SERVICE层服务结构体
type ESEmployeeService struct {
	InstEmployeeDAO dao.EmployeeDAO
}

// SERVICE层服务实例变量
var InstESEmployeeService = new(ESEmployeeService)

/*
@title     函数名称:  Query
@description      :  通用查询
@auth      作者:      leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: param * dto.EmployeeQueryParam
@return    返回参数名: * dto.EmployeePageResult
*/
func (serviceInst *ESEmployeeService) Query(param *dto.EmployeeQueryParam) *dto.EmployeePageResult {

	entities, err := serviceInst.InstEmployeeDAO.FindByQueryParam(param)
	var result dto.EmployeePageResult
	if err != nil {
		result.FailMessage(err.Error())
		return &result
	}
	result.Page.Count = 0
	if entities != nil {
		result.Page.Count = len(*entities)
		serviceInst.fills(entities)
	}
	result.Success()
	result.Data = *entities
	result.Page.Total, _ = serviceInst.InstEmployeeDAO.CountByQueryParam(param)
	result.Page.Current = param.Current
	result.Page.PageSize = param.PageSize

	return &result
}

/*
@title     函数名称 :  Count
@description       :  通用查询计数
@auth      作者     : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: param * dto.EmployeeQueryParam
@return    返回参数名: * dto.EmployeeJsonResult
*/
func (serviceInst *ESEmployeeService) Count(param *dto.EmployeeQueryParam) (result *basedto.JsonResult) {
	result = &basedto.JsonResult{}
	result.Success()

	cnt, err := serviceInst.InstEmployeeDAO.CountByQueryParam(param)
	if err != nil {
		result.FailMessage(err.Error())
		return result
	}

	key := fmt.Sprintf("%d", cnt)
	result.Data = key

	return result
}

/*
@title     函数名称: fills
@description      : 填充关联子表信息。
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: entity *model.Employee
@return    返回参数名: 无
*/
func (serviceInst *ESEmployeeService) fills(entities *[]model.Employee) {

	for index := range *entities {

		serviceInst.fill(&(*entities)[index])
	}

}

/*
@title     函数名称: FindById(Id int32)
@description      : 根据主键查询记录
@auth      作者:     leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名:Id int32
@return    返回参数名:*dto.EmployeeJsonResult
*/
func (serviceInst *ESEmployeeService) FindById(Id int32) *dto.EmployeeJsonResult {

	var result dto.EmployeeJsonResult
	entity, found, err := serviceInst.InstEmployeeDAO.FindById(Id)

	if err != nil {
		result.FailCodeMsg(basedto.CODE_NOFOUND_RECORD, err.Error())
		return &result
	}
	if !found {
		result.Success() //result.FailCodeMsg( basedto.CODE_NOFOUND_RECORD,err.Error())
		return &result
	}

	if entity != nil && found {
		serviceInst.fill(entity)
		result.Success()
		result.Data = entity
	} else {
		result.SuccessMessage("没有找到记录！")
	}

	return &result

}

/*
@title     函数名称: fill
@description      : 填充关联子表信息。
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: entity *model.Employee
@return    返回参数名: 无
*/
func (serviceInst *ESEmployeeService) fill(entity *model.Employee) {

}

/*
@title     函数名称: FindByIds(pks string)
@description      :

	根据主键Id  查询多条记录
	例子： FindByIds("1,36,39")

@auth      作者:     leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名:Id int32
@return    返回参数名:*dto.EmployeeJsonResult
*/
func (serviceInst *ESEmployeeService) FindByIds(pks string) *dto.EmployeePageResult {
	var result dto.EmployeePageResult
	entities, err := serviceInst.InstEmployeeDAO.FindByIds(pks)
	if err != nil {
		result.FailMessage(err.Error())
		return &result
	}

	result.SetData(*entities)
	if entities != nil {
		result.Page.Count = len(*entities)
		result.Page.Total = int32(len(*entities))
		serviceInst.fills(entities)
	}
	result.Code = 200
	result.Msg = "成功"

	return &result
}

/*
@title     函数名称: DeleteById
@description      : 根据主键软删除。
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: Id int32
@return    返回参数名: *basedto.JsonResult
*/
func (serviceInst *ESEmployeeService) DeleteById(Id int32) *basedto.JsonResult {
	err := serviceInst.InstEmployeeDAO.DeleteById(Id)
	var result basedto.JsonResult
	if err != nil {
		result.FailMessage(err.Error())
		return &result
	}
	result.Success()
	return &result

}

/*
@title     函数名称: Save
@description      : 主键%s为nil,0新增; !=nil修改。
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: entity *model.Employee
@return    返回参数名: *basedto.JsonResult
*/
func (serviceInst *ESEmployeeService) Save(entity *model.Employee) *basedto.JsonResult {

	var e error
	if entity.Id == 0 {
		entity.Id = 0
		_, e = serviceInst.InstEmployeeDAO.Insert(entity)

	} else {
		_, e = serviceInst.InstEmployeeDAO.Update(entity)
	}
	var result basedto.JsonResult
	if e != nil {
		result.FailMessage(e.Error())
		return &result
	}

	result.SuccessData(fmt.Sprintf("%d", entity.Id))
	return &result

}

/*
@title     函数名称: UpdateNotNullProps
@description      : 更新非空字段
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: entity *model.Employee
@return    返回参数名: *basedto.JsonResult
*/
func (serviceInst *ESEmployeeService) UpdateNotNullProps(Id int32, entity map[string]interface{}) *basedto.JsonResult {
	var result basedto.JsonResult
	_, err := serviceInst.InstEmployeeDAO.UpdateNotNullProps(Id, entity)

	if err != nil {
		result.FailMessage(err.Error())
		return &result
	}
	return result.Success()
}

/*
@title     函数名称: Demo
@description      : 代码示例
@auth      作者   : leijmdas@163.com 时间: 2024-03-30 10:29:07
@param     输入参数名: 无
@return    返回参数名: 无
*/
func (serviceInst *ESEmployeeService) Demo() {
	var entity model.Employee

	entity.Ini(false)
	result := serviceInst.Save(&entity)
	fmt.Println(result)

	findResult := serviceInst.FindById(entity.Id)
	fmt.Println(findResult)

}

// End of  ESEmployeeService
